﻿//-------------------------------------------------------------------
//	Copyright (c) 2010-2014  Zhirnov Andrey
//	This file is part of the "UX Standard Lib" project.
//	See copyright notice in "UX_STL_Ext.h".
//-------------------------------------------------------------------

#ifndef _UXS_AL_ENUMS_H
#define _UXS_AL_ENUMS_H

#pragma once

#include "../openal.h"

namespace UX_STL
{
namespace ALShell
{
	using namespace UXTypesExt;
	using namespace UXMath;

	typedef ALenum		ALenum_t;
	
// ----------------------- Sound Format -------------------------- //

namespace al_format
{
	enum	type	: ALenum_t
	{
		_UNKNOWN		= 0,

		MONO_8			= AL_FORMAT_MONO8,
		MONO_16			= AL_FORMAT_MONO16,
		MONO_F32		= AL_FORMAT_MONO_FLOAT32,
		MONO_F64		= AL_FORMAT_MONO_DOUBLE_EXT,
		MONO_MULAW		= AL_FORMAT_MONO_MULAW,
		MONO_IMA4		= AL_FORMAT_MONO_IMA4,
		MONO_16_ADPCM	= AL_FORMAT_IMA_ADPCM_MONO16_EXT,

		STEREO_8		= AL_FORMAT_STEREO8,
		STEREO_16		= AL_FORMAT_STEREO16,
		STEREO_F32		= AL_FORMAT_STEREO_FLOAT32,
		STEREO_F64		= AL_FORMAT_STEREO_DOUBLE_EXT,
		STEREO_MULAW	= AL_FORMAT_STEREO_MULAW,
		STEREO_IMA4		= AL_FORMAT_STEREO_IMA4,
		STEREO_16_ADPCM	= AL_FORMAT_IMA_ADPCM_STEREO16_EXT,

		QUAD_8			= AL_FORMAT_QUAD8,
		QUAD_16			= AL_FORMAT_QUAD16,
		QUAD_F32		= AL_FORMAT_QUAD32,
		QUAD_MULAW		= AL_FORMAT_QUAD_MULAW,

		CHN51_8			= AL_FORMAT_51CHN8,
		CHN51_16		= AL_FORMAT_51CHN16,
		CHN51_F32		= AL_FORMAT_51CHN32,
		CHN51_MULAW		= AL_FORMAT_51CHN_MULAW,

		CHN61_8			= AL_FORMAT_61CHN8,
		CHN61_16		= AL_FORMAT_61CHN16,
		CHN61_F32		= AL_FORMAT_61CHN32,
		CHN61_MULAW		= AL_FORMAT_61CHN_MULAW,

		CHN71_8			= AL_FORMAT_71CHN8,
		CHN71_16		= AL_FORMAT_71CHN16,
		CHN71_F32		= AL_FORMAT_71CHN32,
		CHN71_MULAW		= AL_FORMAT_71CHN_MULAW,

		REAR_8			= AL_FORMAT_REAR8,
		REAR_16			= AL_FORMAT_REAR16,
		REAR_F32		= AL_FORMAT_REAR32,
		REAR_MULAW		= AL_FORMAT_REAR_MULAW,

		VORBIS			= AL_FORMAT_VORBIS_EXT,
		WAVE			= AL_FORMAT_WAVE_EXT,
	};
}


// ---------------------- Distance Model ------------------------- //

namespace al_distance_model
{
	enum	type	: ALenum_t
	{
		_UNKNOWN			= AL_NONE,
		INVERSE				= AL_INVERSE_DISTANCE,
		INVERSE_CLAMPED		= AL_INVERSE_DISTANCE_CLAMPED,
		LINEAR				= AL_LINEAR_DISTANCE,
		LINEAR_CLAMPED		= AL_LINEAR_DISTANCE_CLAMPED,
		EXPONENT			= AL_EXPONENT_DISTANCE,
		EXPONENT_CLAMPED	= AL_EXPONENT_DISTANCE_CLAMPED,
	};
}


// ------------------------- Sound State ------------------------- //

namespace al_sound_state
{
	enum	type	: ALenum_t
	{
		INITIAL		= AL_INITIAL,
		PLAYING		= AL_PLAYING,
		PAUSED		= AL_PAUSED,
		STOPPED		= AL_STOPPED,
	};
}


// --------------------------- Filter ---------------------------- //

namespace al_filter
{
	enum	type	: uint8
	{
		UNKNOWN		= AL_FILTER_null,
		LOWPASS		= AL_FILTER_LOWPASS,
		HIGHPASS	= AL_FILTER_HIGHPASS,
		BANDPASS	= AL_FILTER_BANDPASS,
	};
}


// --------------------------- Effect ---------------------------- //

namespace al_effect
{
	enum	type	: ALenum_t
	{
		UNKNOWN				= AL_EFFECT_null,
		REVERB				= AL_EFFECT_REVERB,
		CHORUS				= AL_EFFECT_CHORUS,
		DISTORTION			= AL_EFFECT_DISTORTION,
		ECHO				= AL_EFFECT_ECHO,
		FLANGER				= AL_EFFECT_FLANGER,
		FREQUENCY_SHIFTER	= AL_EFFECT_FREQUENCY_SHIFTER,
		VOCAL_MORPHER		= AL_EFFECT_VOCAL_MORPHER,
		PITCH_SHIFTER		= AL_EFFECT_PITCH_SHIFTER,
		RING_MODULATOR		= AL_EFFECT_RING_MODULATOR,
		AUTOWAH				= AL_EFFECT_AUTOWAH,
		COMPRESSOR			= AL_EFFECT_COMPRESSOR,
		EQUALIZER			= AL_EFFECT_EQUALIZER,
		EAX_REVERB			= AL_EFFECT_EAXREVERB,
	};
}


// -------------------------- Equalizer -------------------------- //

namespace al_equalizer
{
	enum	type	: uint8
	{
		LOW_GAIN		= AL_EQUALIZER_LOW_GAIN,
		LOW_CUTOFF		= AL_EQUALIZER_LOW_CUTOFF,
		MID1_GAIN		= AL_EQUALIZER_MID1_GAIN,
		MID1_CENTER		= AL_EQUALIZER_MID1_CENTER,
		MID1_WIDTH		= AL_EQUALIZER_MID1_WIDTH,
		MID2_GAIN		= AL_EQUALIZER_MID2_GAIN,
		MID2_CENTER		= AL_EQUALIZER_MID2_CENTER,
		MID2_WIDTH		= AL_EQUALIZER_MID2_WIDTH,
		HIGH_GAIN		= AL_EQUALIZER_HIGH_GAIN,
		HIGH_CUTOFF		= AL_EQUALIZER_HIGH_CUTOFF,
	};
}


// --------------------------- Autowah --------------------------- //

namespace al_autowah
{
	enum	type	: uint8
	{
		ATTACK_TIME		= AL_AUTOWAH_ATTACK_TIME,
		RELEASE_TIME	= AL_AUTOWAH_RELEASE_TIME,
		RESONANCE		= AL_AUTOWAH_RESONANCE,
		PEAK_GAIN		= AL_AUTOWAH_PEAK_GAIN,
	};
}


// ------------------------ Ring Modulator ----------------------- //

namespace al_ring_modulator
{
	enum	type	: uint8
	{
		FREQUENCY		= AL_RING_MODULATOR_FREQUENCY,
		HIGHPASS_CUTOFF	= AL_RING_MODULATOR_HIGHPASS_CUTOFF,
		WAVEFORM		= AL_RING_MODULATOR_WAVEFORM,
	};
}


// ------------------------ Pitch Shifter ------------------------ //

namespace al_pitch_shifter
{
	enum	type	: uint8
	{
		COARSE_TUNE		= AL_PITCH_SHIFTER_COARSE_TUNE,
		FINE_TUNE		= AL_PITCH_SHIFTER_FINE_TUNE,
	};
}


// ------------------------ EAX Reverb --------------------------- //

namespace al_eax_reverb
{
	enum	type	: uint8
	{
		DENSITY					= AL_EAXREVERB_DENSITY,
		DIFFUSION				= AL_EAXREVERB_DIFFUSION,
		GAIN					= AL_EAXREVERB_GAIN,
		GAINHF					= AL_EAXREVERB_GAINHF,
		GAINLF					= AL_EAXREVERB_GAINLF,
		DECAY_TIME				= AL_EAXREVERB_DECAY_TIME,
		DECAY_HFRATIO			= AL_EAXREVERB_DECAY_HFRATIO,
		DECAY_LFRATIO			= AL_EAXREVERB_DECAY_LFRATIO,
		REFLECTIONS_GAIN		= AL_EAXREVERB_REFLECTIONS_GAIN,
		REFLECTIONS_DELAY		= AL_EAXREVERB_REFLECTIONS_DELAY,
		REFLECTIONS_PAN			= AL_EAXREVERB_REFLECTIONS_PAN,
		LATE_REVERB_GAIN		= AL_EAXREVERB_LATE_REVERB_GAIN,
		LATE_REVERB_DELAY		= AL_EAXREVERB_LATE_REVERB_DELAY,
		LATE_REVERB_PAN			= AL_EAXREVERB_LATE_REVERB_PAN,
		ECHO_TIME				= AL_EAXREVERB_ECHO_TIME,
		ECHO_DEPTH				= AL_EAXREVERB_ECHO_DEPTH,
		MODULATION_TIME			= AL_EAXREVERB_MODULATION_TIME,
		MODULATION_DEPTH		= AL_EAXREVERB_MODULATION_DEPTH,
		AIR_ABSORPTION_GAINHF	= AL_EAXREVERB_AIR_ABSORPTION_GAINHF,
		HFREFERENCE				= AL_EAXREVERB_HFREFERENCE,
		LFREFERENCE				= AL_EAXREVERB_LFREFERENCE,
		ROOM_ROLLOFF_FACTOR		= AL_EAXREVERB_ROOM_ROLLOFF_FACTOR,
		DECAY_HFLIMIT			= AL_EAXREVERB_DECAY_HFLIMIT,
	};
}


// ---------------------------- Reverb --------------------------- //

namespace al_reverb
{
	enum	type	: uint8
	{
		DENSITY					= AL_REVERB_DENSITY,
		DIFFUSION				= AL_REVERB_DIFFUSION,
		GAIN					= AL_REVERB_GAIN,
		GAINHF					= AL_REVERB_GAINHF,
		DECAY_TIME				= AL_REVERB_DECAY_TIME,
		DECAY_HFRATIO			= AL_REVERB_DECAY_HFRATIO,
		REFLECTIONS_GAIN		= AL_REVERB_REFLECTIONS_GAIN,
		REFLECTIONS_DELAY		= AL_REVERB_REFLECTIONS_DELAY,
		LATE_REVERB_GAIN		= AL_REVERB_LATE_REVERB_GAIN,
		LATE_REVERB_DELAY		= AL_REVERB_LATE_REVERB_DELAY,
		AIR_ABSORPTION_GAINHF	= AL_REVERB_AIR_ABSORPTION_GAINHF,
		ROOM_ROLLOFF_FACTOR		= AL_REVERB_ROOM_ROLLOFF_FACTOR,
		DECAY_HFLIMIT			= AL_REVERB_DECAY_HFLIMIT,
	};
}


// -------------------------- Chorus ----------------------------- //

namespace al_chorus
{
	enum	type	: uint8
	{
		WAVEFORM	= AL_CHORUS_WAVEFORM,
		PHASE		= AL_CHORUS_PHASE,
		RATE		= AL_CHORUS_RATE,
		DEPTH		= AL_CHORUS_DEPTH,
		FEEDBACK	= AL_CHORUS_FEEDBACK,
		DELAY		= AL_CHORUS_DELAY,
	};
}


// ------------------------ Distortion --------------------------- //

namespace al_distortion
{
	enum	type	: uint8
	{
		EDGE			= AL_DISTORTION_EDGE,
		GAIN			= AL_DISTORTION_GAIN,
		LOWPASS_CUTOFF	= AL_DISTORTION_LOWPASS_CUTOFF,
		EQCENTER		= AL_DISTORTION_EQCENTER,
		EQBANDWIDTH		= AL_DISTORTION_EQBANDWIDTH,
	};
}


// -------------------------- Echo ------------------------------- //

namespace al_echo
{
	enum	type	: uint8
	{
		DELAY		= AL_ECHO_DELAY,
		LRDELAY		= AL_ECHO_LRDELAY,
		DAMPING		= AL_ECHO_DAMPING,
		FEEDBACK	= AL_ECHO_FEEDBACK,
		SPREAD		= AL_ECHO_SPREAD,
	};
}


// ------------------------ Flanger ------------------------------ //

namespace al_flanger
{
	enum	type	: uint8
	{
		WAVEFORM	= AL_FLANGER_WAVEFORM,
		PHASE		= AL_FLANGER_PHASE,
		RATE		= AL_FLANGER_RATE,
		DEPTH		= AL_FLANGER_DEPTH,
		FEEDBACK	= AL_FLANGER_FEEDBACK,
		DELAY		= AL_FLANGER_DELAY,
	};
}


// --------------------- Frequency Shifter ----------------------- //

namespace al_freq_shifter
{
	enum	type	: uint8
	{
		FREQUENCY		= AL_FREQUENCY_SHIFTER_FREQUENCY,
		LEFT_DIRECTION	= AL_FREQUENCY_SHIFTER_LEFT_DIRECTION,
		RIGHT_DIRECTION	= AL_FREQUENCY_SHIFTER_RIGHT_DIRECTION,
	};
}


// ----------------------- Vocal Morpher ------------------------- //

namespace al_vocal_morpher
{
	enum	type	: uint8
	{
		PHONEMEA				= AL_VOCAL_MORPHER_PHONEMEA,
		PHONEMEA_COARSE_TUNING	= AL_VOCAL_MORPHER_PHONEMEA_COARSE_TUNING,
		PHONEMEB				= AL_VOCAL_MORPHER_PHONEMEB,
		PHONEMEB_COARSE_TUNING	= AL_VOCAL_MORPHER_PHONEMEB_COARSE_TUNING,
		WAVEFORM				= AL_VOCAL_MORPHER_WAVEFORM,
		RATE					= AL_VOCAL_MORPHER_RATE,
	};
}

//-------------------------------------------------------------------

}	// ALShell
}	// UX_STL

#endif	// _UXS_AL_ENUMS_H